<template>
  <div>
    <h2>message: {{ message }}</h2>
    <button @click="changeMessage">修改message</button>
    <hr>
    <h2>账号: {{ account.username }}</h2>
    <h2>密码: {{ account.password }}</h2>
    <button @click="changeAccount">修改账号</button>
    <button @click="account.username='zhangsan'">修改账号</button>
    <hr>
    <!-- 默认情况下在template中使用ref时, vue会自动对其进行解包(取出其中value) -->
    <h2>当前计数: {{ counter }}</h2>
    <button @click="increment">+1</button>
    <button @click="counter++">+1</button>

    <hr>
    <!-- 使用的时候不需要写.value -->
    <h2>当前计数: {{ info.counter }}</h2>
    <!-- 修改的时候需要写.value -->
    <button @click="info.counter.value++">+1</button>
  </div>
</template>

<script>
import { reactive, ref } from 'vue'

export default {
  setup() {
    // 1.定义普通的数据: 可以正常的被使用
    // 缺点: 数据不是响应式的
    let message = "Hello World"

    function changeMessage() {
      message = "你好啊,李银河!"
      console.log(message)
    }

    // 2.定义响应式数据
    // 2.1.reactive函数: 定义复杂类型的数据
    const account = reactive({
      username: "coderwhy",
      password: "123456"
    })

    function changeAccount() {
      account.username = "kobe"
    }

    // 2.2.ref函数: 定义简单类型的数据(也可以定义复杂类型的数据)
    // counter定义响应式数据
    const counter = ref(0)

    function increment() {
      counter.value++
    }

    // 3.ref是浅层解包
    const info = {
      counter
    }

    return {
      message,
      changeMessage,
      account,
      changeAccount,
      counter,
      increment,
      info
    }
  }
}
</script>

